<?php


/**
 * 邮件发送
 *
 * 配置信息:<pre>
 * $config = array(
 * 'host' => '',	主机
 * 'port' => '',	端口号
 * 'name' => '',
 * 'auth' => '',
 * 'user' => '',
 * 'password' => '',
 * 'timeout' => '', 超时时间,默认60秒
 * )
 * </pre>
 *
 * @author Qian Su <aoxue.1988.su.qian@163.com>
 * @copyright ©2003-2103 phpwind.com
 * @license http://www.windframework.com
 *
 * @version $Id: WindSmtpMail.php 3298 2012-01-06 12:48:26Z yishuo $
 */
class WindSmtpMail extends WindModule implements IWindSendMail
{
    /**
     * @var WindSmtp 邮件发送服务器
     */
    protected $smtp = null;
    /**
     * 邮件发送服务器.
     *
     * @var string
     */
    protected $host;
    /**
     * 邮件发送端口.
     *
     * @var int
     */
    protected $port;
    /**
     * @var string 邮件主机名
     */
    protected $name;
    /**
     * 是否启用验证
     *
     * @var bool
     */
    protected $auth;
    /**
     * @var string 邮件用户名
     */
    protected $username;
    /**
     * @var string 邮件密码
     */
    protected $password;
    /**
     * 请求超时时间.
     *
     * @var string
     */
    protected $timeout = 60;

    /**
     * @param WindMail $mail
     *
     * @see IWindSendMail::send()
     */
    public function send($mail, $config = array())
    {
        if ($this->smtp === null) {
            $this->_init($config);
            $this->smtp = new WindSmtp($this->host, $this->port, $this->timeout);
        }
        $this->smtp->open();
        $this->smtp->ehlo($this->name);
        if ($this->auth) {
            $this->smtp->authLogin($this->username, $this->password);
        }
        $this->smtp->mailFrom($mail->getFrom());
        foreach ($mail->getRecipients() as $rcpt) {
            $this->smtp->rcptTo($rcpt);
        }
        $this->smtp->data($mail->createHeader().$mail->createBody());
        $this->smtp->quit();

        return true;
    }

    /**
     * @param array() $config
     */
    private function _init($config)
    {
        parent::setConfig($config);
        $this->host = $this->getConfig('host', '', '127.0.0.1');
        $this->port = $this->getConfig('port', '', '25');
        $this->name = $this->getConfig('name', '', 'localhost');
        $this->auth = $this->getConfig('auth', '', true);
        $this->username = $this->getConfig('user');
        $this->password = $this->getConfig('password');
        $this->timeout = $this->getConfig('timeout', '', 60);
    }
}
